home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / diskutil / noahdi.zoo / noahdi / mfp.h < prev    next >
Text File  |  1992-05-24  |  8KB  |  190 lines

  1. /*
  2.     File: MFP.H               Atari ST 68901 MFP device.
  3.  
  4.     Oct 1988. V1.00 T.H. Schipper
  5.  
  6. */
  7. /* References:
  8.  
  9.  * Atari Toolkit page 984 
  10.  * MOSTEK data book page VI-103 
  11. */
  12. /*
  13. Copyright (c) 1988 - 1991 by Ted Schipper.
  14.  
  15. Permission to use, copy, modify, and distribute this software and its
  16. documentation for any purpose and without fee is hereby granted,
  17. provided that the above copyright notice appear in all copies and that
  18. both that copyright notice and this permission notice appear in
  19. supporting documentation.
  20.  
  21. This software is provided AS IS with no warranties of any kind.  The author
  22. shall have no liability with respect to the infringement of copyrights,
  23. trade secrets or any patents by this file or any part thereof.  In no
  24. event will the author be liable for any lost revenue or profits or
  25. other special, indirect and consequential damages.
  26. */
  27.  
  28. #define MFP_ADDR 0xFFFA00L      /* MFP device addres */
  29.  
  30. #define MFP      ((struct mfp_chip *) MFP_ADDR)
  31.  
  32.  
  33.  struct mfp_chip {
  34.                   char reg[48]; /* MFP registers are on odd bytes */
  35.                  } ;
  36.  
  37. /* MFP register names */
  38.  
  39. #define GPIP    reg[1]          /* general purpose I/O (interrupt port) */
  40. #define AER     reg[3]          /* active edge register */
  41. #define DDR     reg[5]          /* data direction register */
  42. #define IERA    reg[7]          /* interrupt enable register A */
  43. #define IERB    reg[9]          /* interrupt enable register B */
  44. #define IPRA    reg[11]         /* interrupt pending register A */
  45. #define IPRB    reg[13]         /* interrupt pending register B */
  46. #define ISRA    reg[15]         /* interrupt in service register A */
  47. #define ISRB    reg[17]         /* interrupt in service register B */
  48. #define IMRA    reg[19]         /* interrupt mask register A */
  49. #define IMRB    reg[21]         /* interrupt mask register B */
  50. #define VR      reg[23]         /* vector base address register */
  51. #define TACR    reg[25]         /* timer A control register */
  52. #define TBCR    reg[27]         /* timer B control register */
  53. #define TCDCR   reg[29]         /* timer C + B control register */
  54. #define TADR    reg[31]         /* timer A data register */
  55. #define TBDR    reg[33]         /* timer B data register */
  56. #define TCDR    reg[35]         /* timer C data register */
  57. #define TDDR    reg[37]         /* timer D data register */
  58. #define SCR     reg[39]         /* synchronous character register */
  59. #define UCR     reg[41]         /* USART control register */
  60. #define RSR     reg[43]         /* receiver status register */
  61. #define TSR     reg[45]         /* transmitter status register */
  62. #define UDR     reg[47]         /* USART data register */
  63.  
  64.  
  65. /* names of General Purpose IO Port bits: */
  66.  
  67. #define IO_CBSY     0x01        /* Centronics Busy */
  68. #define IO_DCD      0x02        /* RS232 Data Carrier Detect */
  69. #define IO_CTS      0x04        /* RS232 Clear To Send */
  70. #define IO_GPU      0x08        /* GPU Operation done ???? What's this */
  71. #define IO_AINT     0x10        /* ACIA interrupt (KB or MIDI) */
  72. #define IO_DINT     0x20        /* DMA interrupt (FDC or HDC) */
  73. #define IO_RI       0x40        /* RS232 Ring Indicator */
  74. #define IO_MONO     0x80        /* Monochrome Monitor Detect */
  75.  
  76.  
  77. /* names of interrupts in register A: */
  78.  
  79. #define IRA_TIMB    0x01        /* Timer B */
  80. #define IRA_TERR    0x02        /* RS232 Transmitter Error */
  81. #define IRA_TRDY    0x04        /* RS232 Transmitter Ready */
  82. #define IRA_RERR    0x08        /* RS232 Receiver Error */
  83. #define IRA_RRDY    0x10        /* RS232 Receiver Ready */
  84. #define IRA_TIMA    0x20        /* Timer A */
  85. #define IRA_RI      0x40        /* GPIO6 RS232 RI */
  86. #define IRA_MONO    0x80        /* GPIO7 MONO Detect */
  87.  
  88.  
  89. /* names of interrupts in register B: */
  90.  
  91. #define IRB_CBSY    0x01        /* GPIO0 Centronics Busy */
  92. #define IRB_DCD     0x02        /* GPIO1 RS232 DCD */
  93. #define IRB_CTS     0x04        /* GPIO2 RS232 CTS */
  94. #define IRB_GPU     0x08        /* GPIO3 GPU Operation done ???? what's this */
  95. #define IRB_TIMD    0x10        /* Timer D */
  96. #define IRB_TIMC    0x20        /* Timer C */
  97. #define IRB_AINT    0x40        /* GPIO4 AINT: ACIA's */
  98. #define IRB_DINT    0x80        /* GPIO5 DINT: DMA devices (HDC/FDC) */
  99.  
  100. /* bits in VR: */
  101.  
  102. #define V_S         0x08        /* Software end-of-interrupt mode */
  103. #define V_V         0xF0        /* 4 most significant bits of int vector */
  104.  
  105. /* bits in TCR A and B */
  106.  
  107. #define TAB_STOP    0x00        /* Timer Stopped */
  108. #define TAB_D004    0x01        /* Delay mode, /004 prescale */
  109. #define TAB_D010    0x02        /* Delay mode, /010 prescale */
  110. #define TAB_D016    0x03        /* Delay mode, /016 prescale */
  111. #define TAB_D050    0x04        /* Delay mode, /050 prescale */
  112. #define TAB_D064    0x05        /* Delay mode, /064 prescale */
  113. #define TAB_D100    0x06        /* Delay mode, /100 prescale */
  114. #define TAB_D200    0x07        /* Delay mode, /200 prescale */
  115. #define TAB_ECM     0x08        /* Event Count Mode */
  116. #define TAB_P004    0x09        /* Pulse Width mode, /004 prescale */
  117. #define TAB_P010    0x0A        /* Pulse Width mode, /010 prescale */
  118. #define TAB_P016    0x0B        /* Pulse Width mode, /016 prescale */
  119. #define TAB_P050    0x0C        /* Pulse Width mode, /050 prescale */
  120. #define TAB_P064    0x0D        /* Pulse Width mode, /064 prescale */
  121. #define TAB_P100    0x0E        /* Pulse Width mode, /100 prescale */
  122. #define TAB_P200    0x0F        /* Pulse Width mode, /200 prescale */
  123. #define TAB_RST     0x10        /* Reset Timer, force timer output low */
  124.  
  125.  
  126. /* bits in TCR C+D */
  127.  
  128. #define TD_STOP     0x00        /* Timer D Stopped */
  129. #define TD_D004     0x01        /* Delay mode, D /004 prescale */
  130. #define TD_D010     0x02        /* Delay mode, D /010 prescale */
  131. #define TD_D016     0x03        /* Delay mode, D /016 prescale */
  132. #define TD_D050     0x04        /* Delay mode, D /050 prescale */
  133. #define TD_D064     0x05        /* Delay mode, D /064 prescale */
  134. #define TD_D100     0x06        /* Delay mode, D /100 prescale */
  135. #define TD_D200     0x07        /* Delay mode, D /200 prescale */
  136. #define TC_STOP     0x00        /* Timer C Stopped */
  137. #define TC_D004     0x10        /* Delay mode, C /004 prescale */
  138. #define TC_D010     0x20        /* Delay mode, C /010 prescale */
  139. #define TC_D016     0x30        /* Delay mode, C /016 prescale */
  140. #define TC_D050     0x40        /* Delay mode, C /050 prescale */
  141. #define TC_D064     0x50        /* Delay mode, C /064 prescale */
  142. #define TC_D100     0x60        /* Delay mode, C /100 prescale */
  143. #define TC_D200     0x70        /* Delay mode, C /200 prescale */
  144.  
  145. /* bits in UCR: */
  146.  
  147. #define U_NU        0x01        /* Not Used */
  148. #define U_EVEN      0x02        /* Even / Odd parity */
  149. #define U_PAR       0x04        /* Parity Enable / Disable */
  150. /* Start / Stop bit Control */
  151. #define U_SYNC      0x00        /* Synchrone */
  152. #define U_ASYNC1    0x08        /* Asynchrone, 1 stop bit */
  153. #define U_ASYNC1_5  0x10        /* Asynchrone, 1.5 stop bit */
  154. #define U_ASYNC2    0x18        /* Asynchrone, 2 stop bits */
  155. /* Word Length Contol */
  156. #define U_D8        0x00        /* Word length 8 data bits */
  157. #define U_D7        0x20        /* Word length 7 data bits */
  158. #define U_D6        0x40        /* Word length 6 data bits */
  159. #define U_D5        0x60        /* Word length 5 data bits */
  160.  
  161. #define U_DIV16     0x80        /* Divide Clock by 16 */
  162.  
  163. /* bits in RSR: */
  164.  
  165. #define R_RE        0x01        /* Receiver Enable */
  166. #define R_SSE       0x02        /* Sync Strip Enable */
  167. #define R_MCIP      0x04        /* Match / Character in Progress */
  168. #define R_BREAK     0x08        /* Break Detected */
  169. #define R_FS        0x08        /* Found / Search Detected */
  170. #define R_FE        0x10        /* Frame Error */
  171. #define R_PE        0x20        /* Parity Error */
  172. #define R_OE        0x40        /* Overrun Error */
  173. #define R_BF        0x80        /* Buffer Full */
  174.  
  175. /* bits in TSR: */
  176.  
  177. #define T_TE        0x01        /* Transmitter Enable */
  178. /* Disabled transmitter configure bits HIGH and LOW */
  179. #define T_HIZ       0x00        /* Output in Tristate */
  180. #define T_LOW       0x02        /* Output LOW */
  181. #define T_HIGH      0x04        /* Output HIGH */
  182. #define T_LOOP      0x06